package com.imooc.product.controller;

import com.imooc.product.common.DecreaseStockInput;
import com.imooc.product.dataobject.ProductCategory;
import com.imooc.product.dataobject.ProductInfo;
import com.imooc.product.dto.CartDTO;
import com.imooc.product.service.CategoryService;
import com.imooc.product.service.ProductService;
import com.imooc.product.utils.ResultVoUtil;
import com.imooc.product.vo.ProductInfoVO;
import com.imooc.product.vo.ProductVO;
import com.imooc.product.vo.ResultVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/** 商品
 * @author : 浦希成
 * @date : 2018/7/27 14:33
 */
@RestController
@RequestMapping("/product")
public class ProductController {
    @Autowired
    private ProductService productService;
    @Autowired
    private CategoryService categoryService;
    /**业务逻辑
     * 1.查询所有在架的商品
     * 2.获取类目列表
     * 3.查询类目
     * 4. 构造数据
     */
    @GetMapping("/list")
    public ResultVO list(){
        /*
          查询所有在架的商品
         */
        List<ProductInfo> productInfos= productService.findUpAll();
        /*
        获取类目列表
         */
        List<Integer> categoryTypes=productInfos.stream()
                .map(ProductInfo::getCategoryType)
                .collect(Collectors.toList());
        /*
        从数据库查询类目
         */
        List<ProductCategory> categories=categoryService.findByCategoryTypeIn(categoryTypes);
        /*
        构造数据
         */
        List<ProductVO> productVOList=new ArrayList<>();
        for (ProductCategory category : categories) {
            ProductVO productVO=new ProductVO();
            productVO.setCategoryName(category.getCategoryName());
            productVO.setCategoryType(category.getCategoryType());
            List<ProductInfoVO> productInfoVoList=new ArrayList<ProductInfoVO>();
            for (ProductInfo productInfo : productInfos) {
                if(productInfo.getCategoryType().equals(category.getCategoryType())) {
                    ProductInfoVO productInfoVO = new ProductInfoVO();
                    BeanUtils.copyProperties(productInfo, productInfoVO);
                    productInfoVoList.add(productInfoVO);
                }
            }
            productVO.setProductInfoVOList(productInfoVoList);
            productVOList.add(productVO);
        }

        return ResultVoUtil.success(productVOList);
    }

    /**
     * 獲取商品列表（专门给订单服务用的）
     * @param productIdList id列表
     * @return 商品列表（
     */
    @PostMapping("/listForOrder")
    public List<ProductInfo> listForOrder(@RequestBody List<String> productIdList){

        return productService.findList(productIdList);
    }

    @PostMapping("/decreaseStock")
    public void decreateStock(@RequestBody List<DecreaseStockInput> decreaseStockInputList){
        productService.decreaseStock(decreaseStockInputList);
    }
}
